<?php
/**
 * User: onwer
 * Date: 11-11-7
 * Time: 下午11:37
 */
require_once dirname(__FILE__).'/DB.php';
require_once dirname(__FILE__).'/Table.php';

class Filed extends DB
{
    public static $filetype = array('文字' => 'varchar( 200)','数字' => 'int(11)',
                                    '图片' => 'varchar( 300)', '文件' => 'varchar( 300)',
                                    '文本区域' => 'text', '日期' => 'date');
    public static $filetypedet=array('文字'=>'<input class="inpt1" type="text" name="%s" value="%s">',
                                    '数字'=>'<input class="inpt1" type="text" name="%s" value="%s">',
                                    '图片'=>'<input class="inpt1" type="text" name="%s" value="%s"><input class="inpt2" type="file" name="img_%s" >',
                                    '文件'=>'<input class="inpt1" type="text" name="%s" value="%s"><input class="ipnt2" type="file" name="file_%s" >',
                                    '文本区域'=>'<textarea class="txta1" name="%s">%s</textarea>',
                                    '日期'=>'<input type="text" name="%s">'
                                    );
    public static $filetypespec=array('图片','文件');
    public function __construct()
    {

        parent::__construct('f_system_filed');

    }

    /**
     * @param  string $filedname 字段名，英文名称
     * @param  string $filedesc 字段描述
     * @param  string $filedtype 字段类型，只能为已定义
     * @param  int $tableid 表ID，属于哪个表
     * @return bool
     */
    public function add($filedname, $filedesc, $filedtype, $tableid)
    {

        if (!$this->isvalid($filedname)) {
            $this->errorinfo[2] = '字段名，只能有英文字母，下划线，英文字母开头！';
            return false;
        }
        if (trim($filedesc) === '') {
            $this->errorinfo[2] = '字段描述不能为空！';
            return false;
        }

        if (!array_key_exists($filedtype, self::$filetype)) {
            $this->errorinfo[2] = '字段类型错误，未定义的类型！';
            return false;
        }
        //查询表是否存在
        $table=new Table();
        $curtablearr = $table->queryid($tableid);
        $curtable = $curtablearr[0];
        if (empty($curtable)) {
            $this->errorinfo[2] =  '表不存在！';
            return false;
        }

        $this->pdo->beginTransaction();
        //添加字段
        $sql = sprintf('ALTER TABLE  `%s` ADD  `%s` %s ', $curtable['table_name'],
            $filedname, self::$filetype[$filedtype]);
        $r1 = $this->exec($sql);

        //在管理字段表插入行
        $r2= $this->insert(array('filed_name'=>$filedname,'filed_desc'=>$filedesc,'filed_type'=>$filedtype,
            'table_id'=>$tableid));

        return $this->endTranst($r1,$r2);
    }

    /**
     * @param $filedname
     * @param $filedesc
     * @param $filedtype
     * @param $filedid
     * @param $tableid
     * @return boolean
     */
    public function alt($filedname, $filedesc, $filedtype, $filedid, $tableid)
    {
        if (!$this->isvalid($filedname)) {
            $this->errorinfo[2] = '字段名，只能有英文字母，下划线，英文字母开头！';
            return false;
        }
        if (trim($filedesc) === '') {
            $this->errorinfo[2] = '字段描述不能为空！';
            return false;
        }

        //获取表名
        $table=new Table();
        $curtablearr = $table->queryid($tableid);
        if(empty($curtablearr)){
            $this->errorinfo[2] = '没有查到该表！';
            return false;
        }
        $curtable = $curtablearr[0];
        //获取字段名
        $curfiledarr=$this->queryfid($filedid);
        if(empty($curfiledarr)){
            $this->errorinfo[2] = '没有查到该字段！';
            return false;
        }
        $curfiled=$curfiledarr[0];


        $this->pdo->beginTransaction();
        //修改具体表中的字段
        $sql = sprintf('ALTER TABLE  `%s` CHANGE  `%s`  `%s` %s  NOT NULL ',
                      $curtable['table_name'],$curfiled['filed_name'],$filedname ,self::$filetype[$filedtype]);
        $r1 = $this->exec($sql);

        //更新字段表中字段数据
        $r2= $this->update(array('filed_name'=>$filedname,'filed_desc'=>$filedesc,'filed_type'=>$filedtype),
                         sprintf('id=%d',$filedid));

        return $this->endTranst($r1,$r2);

    }

    /**
     * 删除字段
     * @param  int $tableid
     * @param  int $filedid
     * @return bool
     */
    public function del($tableid, $filedid)
    {
        //获取表
        $table = new Table();
        $curtablearr = $table->queryid($tableid);
        if(empty($curtablearr)){
            $this->errorinfo[2] = '没有查到该表！';
            return false;
        }
        $curtable=$curtablearr[0];
        ///字段
        $curfiledarr=$this->queryfid($filedid);
        if(empty($curfiledarr)){
            $this->errorinfo[2] = '没有查到该字段！';
            return false;
        }
        $curfiled=$curfiledarr[0];

        $this->pdo->beginTransaction();
        //删除表的字段
        $sql = sprintf('ALTER TABLE `%s`  DROP `%s`', $curtable['table_name'], $curfiled['filed_name']);
        $r1 = $this->exec($sql);

        //在管理字段中删除行
        $r2 = $this->delete(sprintf('id=%d',$filedid));

        return $this->endTranst($r1,$r2);
    }

    public function querytid($tid){
        return $this->select(sprintf('table_id=%d',$tid));
    }
    public function queryfid($fid){
        return $this->select(sprintf('id=%d',$fid));
    }
}
